From 02f3fe0671fe7b4f4068716773db01be7d4482e5 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Fri, 14 Aug 2015 12:05:37 +0200 Subject: [PATCH] wayland: calculate screen physical size A simple calculation is done so far (assuming monitor areas never overlap) so gdk_screen_get_width/height_mm return meaningful values. https://bugzilla.gnome.org/show_bug.cgi?id=753621 --- gdk/wayland/gdkscreen-wayland.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/gdk/wayland/gdkscreen-wayland.c b/gdk/wayland/gdkscreen-wayland.c index ee95107fb2..e60e9fcd8f 100644 --- a/gdk/wayland/gdkscreen-wayland.c +++ b/gdk/wayland/gdkscreen-wayland.c @@ -1007,25 +1007,52 @@ _gdk_wayland_screen_init (GdkWaylandScreen *screen_wayland) static void update_screen_size (GdkWaylandScreen *screen_wayland) { + gboolean emit_changed = FALSE; gint width, height; + gint width_mm, height_mm; gint i; width = height = 0; + width_mm = height_mm = 0; for (i = 0; i < screen_wayland->monitors->len; i++) { GdkWaylandMonitor *monitor = screen_wayland->monitors->pdata[i]; + /* XXX: Largely assuming here that monitor areas + * are contiguous and never overlap. + */ + if (monitor->geometry.x > 0) + width_mm += monitor->width_mm; + else + width_mm = MAX (width_mm, monitor->width_mm); + + if (monitor->geometry.y > 0) + height_mm += monitor->height_mm; + else + height_mm = MAX (height_mm, monitor->height_mm); + width = MAX (width, monitor->geometry.x + monitor->geometry.width); height = MAX (height, monitor->geometry.y + monitor->geometry.height); } + if (screen_wayland->width_mm != width_mm || + screen_wayland->height_mm != height_mm) + { + emit_changed = TRUE; + screen_wayland->width_mm = width_mm; + screen_wayland->height_mm = height_mm; + } + if (screen_wayland->width != width || screen_wayland->height != height) { + emit_changed = TRUE; screen_wayland->width = width; screen_wayland->height = height; - g_signal_emit_by_name (screen_wayland, "size-changed"); } + + if (emit_changed) + g_signal_emit_by_name (screen_wayland, "size-changed"); } static void -- 2.30.2